home *** CD-ROM | disk | FTP | other *** search
/ JCSM Shareware Collection 1993 November / JCSM Shareware Collection - 1993-11.iso / cl720 / fast278j.lzh / FAST.HLP < prev    next >
Text File  |  1992-05-17  |  87KB  |  2,314 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.                                           THE
  24.  
  25.  
  26.                                         "FAST"
  27.  
  28.  
  29.                                        COMPILER
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.                            (c) PETER CAMPBELL SOFTWARE 1992
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.    FAST v3.000
  55.  
  56.  
  57.  
  58.  
  59.  
  60.                                        CONTENTS
  61.  
  62.                 ───────────────────────────────────────────────────
  63.  
  64.  
  65.                 Introduction
  66.  
  67.                 The Compiler
  68.  
  69.                 FAST Commands
  70.                 Command Summary
  71.  
  72.                 FAST Functions
  73.                 Function Summary
  74.  
  75.                 FAST Expressions
  76.  
  77.                 Compiler Directives
  78.                 Directive Summary
  79.  
  80.                 Include Files
  81.  
  82.                 Error Messages
  83.  
  84.                 Example Program Documentation
  85.  
  86. INTRODUCTION
  87.  
  88.  
  89. FAST!
  90.  
  91.  
  92. FAST is a computer language designed specifically for the IBM PC and compatible 
  93. computers. All FAST commands are optimised for speed and compactness, thus resulting in 
  94. the fastest and smallest code possible compared to any other PC language.
  95.  
  96. FAST produces very short and efficient compiled programs for just about anything. 
  97. Programs developed include a multi-file text editor, terminal emulator, find program, 
  98. free flow database, dos command line editor and a 4GL database development system.
  99.  
  100. FAST is a procedural language, losely based on Basic, Pascal, C and Assembler.
  101.  
  102. Your version of FAST should include a compiler, include files and example programs.
  103.  
  104.  
  105. Before reading this manual you may want to experiment with FAST and the example 
  106. programs provided.
  107.  
  108. There are over 11,000 lines of example programs in over 20 programs.
  109.  
  110. After copying the FAST system to a directory on your hard disk run the batch program:
  111. compile. Compile will compile all of the example programs automatically for you.
  112.  
  113. Run the demo program by typing: demo
  114.  
  115. Demo contains some fast screen displays using scrolling screens, windows and fast 
  116. printing. After running the demo program you could edit/view the program by running the 
  117. multi-file text editor, type: wt demo
  118.  
  119. While using wt, press F1 for help.
  120.  
  121. Some of the other example programs include: edit, pu, mis, game, shoot and ffind.
  122.  
  123. Try running all of the example programs, this will give you a feel for what FAST can 
  124. do. View the example programs with wt or your favourite editor.
  125.  
  126. Two other programs have been written in FAST which may be of interest to many people, 
  127. these programs have become seperate products and are available from Peter Campbell 
  128. Software.
  129.  
  130. Free Flow Database (FFD) is a database of free format text. Text can be entered using 
  131. the built in text editor or by importing text files. Users can search for text entries 
  132. by entering in words to search for. Multiple searches can be done to restrict the text 
  133. entries retrieved.
  134.  
  135. FASTBASE is a 4th Generation Database Application Development System. FASTBASE consists 
  136. of a compiler, screen designer, database processor and utilities. FASTBASE is a very 
  137. powerful database design tool, compared to dBASE, Paradox, Dataflex and all the others 
  138. it is more compact, faster, much easier to use. The data dictionary and procedure 
  139. language is very english like and powerful, making applications compact, easy to 
  140. maintain, bug free and very user friendly. Ask for a demo!
  141. THE COMPILER
  142.  
  143. The FAST compiler is called FAST.COM
  144.  
  145. To compile any program simply type: fast program
  146.  
  147. Typing FAST with no program name will display the help screen:
  148.  
  149. ┌────────────────────────────────────────────────────────────────────────────────┐
  150. │ FAST v3.000 (c) Peter Campbell, 14 Apr 92. -h for help.                        │
  151. │                                                                                │
  152. │ (c) Peter Campbell Software 1987-1992. Po Box 54-180, Mana, New Zealand.       │
  153. │                                                                                │
  154. │ HELP                                                                           │
  155. │ ====                                                                           │
  156. │                                                                                │
  157. │ FAST [-h?mls] filename [>outfile]                                              │
  158. │                                                                                │
  159. │ h or ?   help                                                                  │
  160. │ m        Maintenance - change default settings                                 │
  161. │ l        Source listing                                                        │
  162. │ s        Symbol table and memory usage                                         │
  163. │ filename Program to be compiled (.F extension added)                           │
  164. │ >outfile DOS redirection of output: for source or symbol table                 │
  165. │                                                                                │
  166. │ Example: "FAST -s wt" would compile wt.f and output a symbol table and         │
  167. │          memory listing to screen.                                             │
  168. │                                                                                │
  169. │ Note: Options can be prefixed with a hyphen (-) or forward slash (/) and       │
  170. │       can be before or after the filename.                                     │
  171. └────────────────────────────────────────────────────────────────────────────────┘
  172.  
  173. Maintenance: FAST -m
  174.  
  175. A list of all FAST configuration options will appear, prompting you to enter new values 
  176. for each option.
  177.  
  178.     ┌──────────────────────────────────┐
  179.     │ Source File Buffer Size  [10240] │  Larger size may speed up compiler.
  180.     │ Maximum Number of Labels [ 1500] │  Increase for HUGE programs.
  181.     │ Label Memory             [30000] │  Increase for HUGE programs.
  182.     │ Undefined Items Memory   [25000] │  Increase for HUGE programs.
  183.     │                                  │
  184.     │ Create Log File?         [N]     │  A file FAST.LOG can record all compilations.
  185.     └──────────────────────────────────┘
  186.  
  187. The configuration file is called FAST.CFG, it must exist in the current directory, if 
  188. none exists then it is created.
  189. Source listing: FAST -l program
  190.  
  191. FAST will output every program line with the line number, code address and source. If 
  192. any errors are detected then they will be printed, the compiler will not stop after the 
  193. usual 5 error limit.
  194.  
  195. The listing can be redirected to a file using DOS redirection, eg: FAST -l wt >wt.lst
  196.  
  197. Symbol table and memory usage: FAST -s program
  198.  
  199. FAST will print an alphabetically sorted symbol table after a sucessful compilation. 
  200. The symbol table lists all labels, variables, procedures, functions and other user 
  201. defined words with the name, type and value.
  202.  
  203. A memory usage will also print, this details how much memory FAST required to compile 
  204. and how much memory was left. If the memory left is getting low then increase the 
  205. memory sizes by using FAST maintenance.
  206.  
  207. The memory usage also displays the compiled program memory requirements, ie: code size, 
  208. stack size, window space (if windows are used) and variable/data space.
  209.  
  210. FAST COMMANDS
  211.  
  212. COLOUR
  213.  
  214. bright n
  215. Sets the intensity bit of the current colour. Any printing will appear normal (n=0) or 
  216. intense (n=1).
  217.  
  218. colour n
  219. Sets the current colour used by cls, line, plot, print & scroll commands and functions.
  220. colour is a command but can also be used as a variable or function to get the current 
  221. colour.
  222.  
  223. The colour is an 8 bit number (0 to 255), the number is made up in binary as follows:
  224.     fpppbiii
  225. f=flash ppp=paper (background) b=bright (intensity) iii=ink (foreground)
  226.  
  227. A simple way of finding out the number for any colour combination is to use the program 
  228. called 'colour'. See instructions on using colour in the Example Program section.
  229.  
  230. flash n
  231. Sets the flash bit of the current colour. Any printing will appear still (n=0) or 
  232. flashing (n=1).
  233.  
  234. ink n
  235. Sets the current foreground colour. Any printing will appear with the foreground colour 
  236. as specified.
  237. 0=black 1=blue 2=green 3=cyan 4=red 5=magenta 6=yellow 7=white
  238.  
  239. palette n
  240. Determines which colour palette will be used for colour graphics screens.
  241. Experiment with different numbers or consult a technical manual for which colours will 
  242. be displayed, depending on the palette number.
  243.  
  244. paper n
  245. Sets the current background colour. Any printing will appear with the background colour 
  246. as specified.
  247. 0=black 1=blue 2=green 3=cyan 4=red 5=magenta 6=yellow 7=white
  248.  
  249. CONTROL
  250.  
  251. break
  252. Executes the current on-break statement, same as pressing Ctrl-C or Ctrl-ScrollLock.
  253.  
  254. disable break
  255. Turns the break key off, therefore the break key or break command will have no action.
  256.  
  257. enable break
  258. Turns the break key on, the break key or break command will execute the current 
  259. on-break statement.
  260.  
  261. endfor
  262. Drops out of the current forever loop, resuming at the first line after the forever 
  263. statement.
  264.  
  265. for var=n1 to n2 [step n3] statement [... statement ...] next var
  266. The statements within the for command are executed with the variable = n1, then the 
  267. variable is either increment by 1 or by the defined step (n3). The statements are 
  268. repeatedly executed until the variable exceeds n2.
  269.  
  270. forever statement
  271. Executes the statement forever, or until exited. Common ways of executing a forever 
  272. are: goto, break or endfor.
  273.  
  274. gosub label
  275. The program jumps to the subroutine named label. When a return command is executed then 
  276. the program continues after the gosub command.
  277. Note: If using the push or pop commands then remember to keep the stack 'balanced'.
  278.  
  279. goto label
  280. The program jumps to the label.
  281.  
  282. if n [then] statement [else statement]
  283. If n is true (not 0) then the first statement is executed, if false then the second 
  284. statement is executed. The else (second) statement is optional.
  285. Note: the word then is optional.
  286.  
  287. next var [,...]
  288. The variable is incremented by 1 or step (n3) if specified; as defined by the related 
  289. for command. If the variable is less than the end value (n2) then the for statement is 
  290. executed again.
  291.  
  292. on break statement
  293. The on break interupt is set so that when the break key is detected, the on-break 
  294. statement executes.
  295. After the on-break statement finishes then program execution returns to where the break 
  296. key was pushed.
  297.  
  298. repeat n statement
  299. The statement is executed n times.
  300. return [n]
  301. Returns from a function or gosub, optionally returning a value.
  302. Note: If using the push or pop commands then remember to keep the stack 'balanced'.
  303.  
  304. stop
  305. Stops the program and returns to DOS. All memory used by the program is automatically 
  306. free and interupts 08h and 10h are reset if they were set by FAST.
  307. stop is the same as: reset interupts:int 20h
  308. stop is exactly the same as the terminate command.
  309.  
  310. stop resident
  311. The program returns to DOS but remains in memory. All files that are open remain open 
  312. and all memory allocated remains allocated.
  313. All interupt vectors which have been altered also remain altered/active.
  314. This command should be used by terminate and stay resident programs (TSR's).
  315.  
  316. terminate
  317. terminate is exactly the same as the stop command.
  318.  
  319. test break
  320. If the break key has been pressed then the current on-break statement is executed.
  321.  
  322. wait for n
  323. n is computed until true (not 0).
  324. Example: wait for key=' '       ;wait until space is pressed.
  325.  
  326. while n statement
  327. The statement is repeated until n is false (0).
  328. Example: while x<50 print x:x++
  329.  
  330. COMMUNICATIONS
  331.  
  332. disable serial
  333. The communications interupts are reset to their original state before the program was 
  334. started.
  335. Note: All programs that enable serial communications must disable serial before 
  336. returning to DOS.
  337.  
  338. enable serial [n]
  339. Enables the COM1 serial port to send and recieve data.
  340. You can specify the baud rate, stop bits, parity and word length.
  341.  
  342. After enabling serial communications your program will just continue to run as normal. 
  343. Whenever a character is received a special handler will automatically put the byte into 
  344. a buffer, this buffer is defined using the special variables:
  345.  
  346.   serial_size - size of buffer in bytes.
  347.   serial_seg  - allocated segment of memory for buffer.
  348.   serial_head - address for next byte in buffer. If the buffer fills up then 
  349.                 serial_head will wrap around to 0.
  350.  
  351. Example: serial_head=0
  352.          serial_size=10000
  353.          serial_seg=allocate serial_size/16+1
  354.          enable serial 0a3h     ;see below for parameter details...
  355.  
  356.          serial_tail=0          ;last byte 'we' read.
  357.  
  358.          forever
  359.              {
  360.              while serial_head<>serial_tail       ;characters in buffer?
  361.                  {
  362.                  print chr serial_seg[serial_tail]b;             ;print byte
  363.                  serial_tail++                                   ;next byte
  364.                  if serial_tail>=serial_size then serial_tail=0  ;wrap around?
  365.                  }
  366.              if key=27 then disable serial:stop   ;abort if nothing in buffer?
  367.              }
  368.  
  369. The configuration byte (n) is made up of 8 bits: bbbppsww
  370.  
  371.         ┌──────────────────────────────────────────────────┐
  372.         │  bbb          pp          s         ww           │
  373.         │  baud rate    parity      stops     word length  │
  374.         ├──────────────────────────────────────────────────┤
  375.         │  000 =  110   00 = none   0 = one   10 = 7 bits  │
  376.         │  001 =  150   01 = odd    1 = two   11 = 8 bits  │
  377.         │  010 =  300   10 = none                          │
  378.         │  011 =  600   11 = even                          │
  379.         │  100 = 1200                                      │
  380.         │  101 = 2400                                      │
  381.         │  110 = 4800                                      │
  382.         │  111 = 9600                                      │
  383.         └──────────────────────────────────────────────────┘
  384.  
  385. Example: 2400 baud, no parity, 1 stop bit and 8 bits = 101 00 0 11
  386.          enable serial 10100011b   ;or 0a3h in hex.
  387. ERROR HANDLING
  388.  
  389. error [n]
  390. Call the current on-error statement.
  391. If n is specified then the error variable is set to n, otherwise the last/current  
  392. error number is used.
  393.  
  394. error msg filename [,n]
  395. Loads the error message file, locates the current error number (or the specified error) 
  396. and prints the error message. Printing is done using DOS (ie: print dos).
  397. This process requires 16k free memory.
  398. If there is not enough memory or the file does not exist or any error occurs or the 
  399. error number does not exist then error-msg will print 'Error n [DOS=de]' where n=error 
  400. and de=dos error number (ie: 2-file not found or 8-insufficient memory).
  401.  
  402. Example: on error
  403.              {
  404.              error msg "\dos.err"
  405.              stop
  406.              }
  407.  
  408. on error statement
  409. Sets the on-error statement so that when an error occurs the statement is executed. See 
  410. above example.
  411. Note: The error variable contains the error number.
  412.  
  413. FILE
  414.  
  415. change dir pathname
  416. Sets the current directory to a new path.
  417. Includes automatic error checking.
  418.  
  419. change disk n
  420. Changes the default drive to n. 0=A: 1=B: 2=C: ...
  421. change-disk does not detect errors, test using the cdisk function.
  422.  
  423. close #n
  424. Closes the open file (opened by open or create).
  425. Includes automatic error checking.
  426.  
  427. create #n,filename [,reclen]
  428. Creates a file, ready for reading and writing. If the file already exists then it will 
  429. be deleted, the length will be set to 0.
  430. The optional reclen sets the record length, the default is 1. The seek command will 
  431. multiply reclen by the offset you want, thus giving an easy way to acess files with a 
  432. fixed record length.
  433. The file will be referenced using the handle #n, eg: seek #2,50
  434. Includes automatic error checking.
  435.  
  436. delete filename
  437. Deletes the file, wildcards can be used in the filename.
  438. Includes automatic error checking.
  439.  
  440. dir filename,address [,n]
  441. Creates a table of directory entries at the address specified.
  442. Dir will default by searching for all normal and archive files. If n is specified it 
  443. represents the file attributes to search for.
  444. The first word at address contains the number of files found.
  445. Each entry from address+2 is a 13 byte structure containing 'name.ext',0
  446. Since each filename has the 0 as the end character then they can be used as filenames 
  447. by all other FAST commands, eg: load segment:0002,buffer will load 'fast.com'.
  448.  
  449. Example: dir "*.*",segment|0
  450.  
  451.      segment:0000 = 3400  (peek segment|0 will give 34h = 52 files).
  452.      segment:0002 = 'FAST.COM',0,?,?,?,?
  453.      segment:000F = 'FASTL.HLP',0,?,?,?
  454.      segment:001C = ...
  455.  
  456. find first filename [,n]
  457. Finds the first occurrence of a filename - optional wildcards.
  458. Includes automatic error checking.
  459.  
  460. n is an optional file attribute for finding files, the default is all normal files.
  461.               ┌────────────────────────┐
  462.               │ Bits      Attribute    │
  463.               ├────────────────────────┤
  464.               │ 76543210               │
  465.               │ .......1  Read only    │
  466.               │ ......1.  Hidden       │
  467.               │ .....1..  System       │
  468.               │ ....1...  Volume label │
  469.               │ ...1....  Directory    │
  470.               │ ..1.....  Archive      │
  471.               └────────────────────────┘
  472. If the attribute (n) is set to 0 (the default) then all read only, archive & normal 
  473. files are found. If the directory, hidden or system bits are set then they are found 
  474. aswell as normal files.
  475.  
  476. The information for the file found is at address:
  477.     dta segment|dta offset + 15h  = File attribute (see table above).
  478.                            + 16h  = Time stamp (2 bytes).
  479.                            + 18h  = Date stamp (2 bytes).
  480.                            + 1Ah  = File size in bytes (4 bytes).
  481.                            + 1Eh  = File name,0 (asciiz string, 13 bytes).
  482.  
  483. find next
  484. Find next should be used after find-first to find all subsequent files.
  485. Includes automatic error checking. If there are no more files then error 18 will occur.
  486.  
  487. Example: #errors off
  488.          find first "*.*"   ;Find the first file.
  489.          goto entry
  490.          forever
  491.              {
  492.              find next              ;Next file.
  493.              #errors on
  494.              entry:
  495.              if error=18 then goto finished
  496.              if error then error    ;Handle genuine errors with normal error handler.
  497.              ;Process File.
  498.              }
  499.          finished:                  ;no more files...
  500.  
  501. fname string
  502. fname is used to define filenames. fname is the same as the datab command except a 0 
  503. byte is appended to the string automatically (ie: datab string,0).
  504. Example: open #2,output_file
  505.          ...
  506.          output_file: fname 'file.lst'
  507.  
  508. handle #n1,n2
  509. Overrides the file handle for any FAST files from #1 to #12.
  510. n2 could be another FAST handle (eg: #1 thru #12) or a standard DOS handle, 0 to 4.
  511.  
  512. A handle is a number which represents a file that has been opened or created. All FASTs 
  513. file comamnds & functions use #1 to #12 to represent a file.
  514. In reality #1, #2 ... #12 are variables which contain the DOS handle number.
  515. Example: open #1,myfile  ;sets #1 = next availble DOS handle number, typically 5.
  516.  
  517. DOS has 5 default handles which can also be used for input and output but they don't 
  518. represent files. They are:
  519.  
  520.        ┌──────────────────────────────────────────────────────┐
  521.        │ 0  Standard input device, input can be redirected.   │
  522.        │ 1  Standard output device, output can be redirected. │
  523.        │ 2  Standard error device, cannot be redirected.      │
  524.        │ 3  Standard auxiliary device.                        │
  525.        │ 4  Standard printer device.                          │
  526.        └──────────────────────────────────────────────────────┘
  527.  
  528. For example to write bytes to the standard auxiliary device using FAST commands such as 
  529. write #1,50 from address could be done, try...
  530.  
  531.             handle #1,3               ;sets fast handle #1 to DOS handle 3.
  532.             write #1,50 from address  ;write bytes to auxillary device.
  533.  
  534. Note: The five standard DOS handles (0-4) don't have to be opened before use.
  535.  
  536. load filename,address [,length]
  537. Loads the file into memory at address. Maximum load is 64K (65536 bytes), specify the 
  538. length to restrict the number of bytes being loaded.
  539. Includes automatic error checking.
  540. The load command performs the same function as the following:
  541.     open #spare,filename
  542.     null=read #spare,length to address
  543.     close #spare
  544.  
  545. make dir pathname
  546. Makes the directory from the current directory. Same as DOS: mkdir pathname.
  547. Includes automatic error checking.
  548.  
  549. open #n,filename [,reclen]
  550. Opens a file, ready for reading and writing. 
  551. The optional reclen sets the record length, the default is 1. The seek command will 
  552. multiply reclen by the offset you want, thus giving an easy way to acess files with a 
  553. fixed record length.
  554. The file will be referenced using the handle #n, eg: seek #2,50
  555. Includes automatic error checking.
  556.  
  557. reclen #n1,n2
  558. Changes the record length of any open file to value n2.
  559. The record length is used by the seek command.
  560. remove dir pathname
  561. Removes the directory from the current directory. Same as DOS: rmdir pathname.
  562. Includes automatic error checking.
  563.  
  564. rename filename to filename
  565. Renames the first filename to the second filename, wildcards can be used, same as DOS 
  566. ren command.
  567. Includes automatic error checking.
  568.  
  569. save filename,address,length
  570. Creates the filename, writes the bytes from the specified address then closes the file.
  571. The maximum length is 65535 bytes.
  572. Includes automatic error checking.
  573.  
  574. seek #n,record
  575. Moves the file pointer to the nth record. The file offset in bytes = n * reclen.
  576. The default record length is 1, therefore record is simply the offset in bytes.
  577. Record can be a 32 bit expression, therefore files upto 4 Gigabytes can be addressed.
  578. Includes automatic error checking.
  579.  
  580. write #n,length from address
  581. Writes the number of bytes to the open file.
  582. The bytes are written to the current file offset. The current file offset is 0 when a 
  583. file is opened, the seek command can be used to point to any offset within a file.
  584. The write command will update the current file offset so the next write will append.
  585. To read bytes from a file use the read function (see File Functions).
  586. Includes automatic error checking.
  587.  
  588. GRAPHICS
  589.  
  590. hgraphics
  591. Puts a hercules (or compatible) graphics card into graphics mode, screen resolution 
  592. 720*348. The mode command must also be used to tell FAST how many rows across and what 
  593. sort of plot method is to be used: eg: mode 720,and.
  594. For CGA, EGA and VGA cards use the screen command to change to graphics modes.
  595.  
  596. htext
  597. Puts a hercules (or compatible) graphics card into text mode after using hgraphics.
  598.  
  599. line x1,y1 to x2,y2
  600. Draws a line on a graphics screen in dots from x1,y1 to x2,y2.
  601. The screen command should be used to set the graphics display, the mode command should 
  602. be used to set the screen width and plot method.
  603.  
  604. mode n,m
  605. Tells FAST graphics commands the width of the graphics screen and what plot mode should 
  606. be used, either and, or or xor.
  607. n can be either 320,640 or 720 (currently supported by FAST).
  608. m can be and, or or xor.
  609.  
  610. plot x,y
  611. Plots one dot (pixel) on the graphics screen. Colour should be set to determine what 
  612. colour the dot will be.
  613.  
  614. shape "????????????????"
  615. Defines a shape to be used by the SPRITE command. Sprites can be any width in multiples 
  616. of 16 pixels.
  617.  
  618. When defining sprites for MODE 640 or MODE 720 then each character within the shape 
  619. string represents one pixel, MODE 320 uses two characters - 4 colours.
  620.  
  621. The ???? should be replaced with * to represent a bit and spaces to represent spaces.
  622.  
  623. Example: datab 1,8   ;This sprite will be 1*16 pixels wide and 8 pixels high.
  624.          shape "                "
  625.          shape "  ************  "
  626.          shape "  ***      ***  "
  627.          shape "  **        **  "
  628.          shape "   ***    ***   "
  629.          shape "     ******     "
  630.          shape "       **       "
  631.          shape "                "
  632.  
  633. sprite x,y,address
  634. Puts a sprite (bit image graphic) on the screen which must be a graphics screen.
  635.  
  636. A sprite is defined by the contents of the bytes at 'address'.
  637.     address + 0 = width of sprite (in words) 1=16 bits/2=32 bits etc.
  638.     address + 1 = height of sprite (in pixel rows).
  639.     address + 2 = shape data (width*2*height bytes).
  640.  
  641. Example of a sprite 16 pixels across and 5 pixels high.
  642.  
  643. screen 6:mode 640,and
  644. sprite x,y,sprite_address
  645. stop
  646.  
  647. sprite_address:
  648. datab 1,5
  649. shape "       **       "
  650. shape "   **********   "
  651. shape "****************"
  652. shape "   **********   "
  653. shape "       **       "
  654.  
  655. MATH
  656.  
  657. div64 address,n32
  658. Divides the 64 bit number stored at address by the 32 bit number, storing the 64 bit 
  659. result back in address.
  660. The 64 bit number is stored in low....high format.
  661.  
  662. mul64 n32,n32 address
  663. Multiplies n32*n32 and stores the 64 bit result at address.
  664. The 64 bit number is stored in low....high format.
  665.  
  666. Example: mul64 200000,500 addr
  667.          result_low=peek addr        ;result_low must be a 32 bit variable.
  668.          result_high=peek (addr+4)   ;Must be a 32 bit variable.
  669.  
  670. randomize n
  671. Sets a starting point for the random number generator.
  672. To get random numbers each time a program is run use the command: randomize timer.
  673. Random numbers are obtained using the rnd function.
  674.  
  675. MEMORY
  676.  
  677. data n [,...]
  678. Stores word values in memory.
  679. Example: data 5000,10000,15000,20000
  680.  
  681. datab [n] [string] [,...]
  682. Stores byte values of n or strings in memory.
  683.  
  684. Examples: datab 2,3,4,5
  685.           datab 'name.txt',0
  686.           datab 255,'test',0
  687.  
  688. deallocate n
  689. The memory segment n is deallocated (freed). No more references to the memory segment 
  690. are allowed, a severe memory allocation error could result.
  691. Includes automatic error checking.
  692. Memory is allocated using the allocate function.
  693.  
  694. fill[b] length from address with n
  695. Fills the memory at address with n, length times.
  696. fill is for word values (16 bits/2 bytes). fillb is for byte values.
  697.  
  698. free memory
  699. Frees memory in excess of FAST's requirements, leaves the minimum amount of memory for 
  700. code, variables, windows and stack space.
  701. free memory is done automatically when a program starts so not used in normal 
  702. situations.
  703.  
  704. free all memory
  705. Frees all memory used by the FAST program, including the code segment.
  706. free all memory is used by resident programs when they abort. Because free all memory 
  707. uses DOS functions it can only be done when DOS is not being used. Check the tsr.f and 
  708. pu.f programs for a guide to TSR programming.
  709.  
  710. modify segment to n
  711. Modifies the length of an allocated memory segment.
  712. n specifies the length in paragraphs. 1 paragraph is 16 bytes.
  713. Includes automatic error checking.
  714. A memory segment can almost always be reduced in size but enlarging a segment depends 
  715. on the available memory and whether or not other segments have been allocated.
  716.  
  717. move[b] length from address to address
  718. Moves the number of words (or bytes if moveb) from the first address to the second 
  719. address. The maximum number of words moved at once is 32768, the maximum number of 
  720. bytes is 65535. If the length=0 then nothing is done.
  721. Note: Move will never over-ride memory, the move command determines automatically 
  722. whether a forward or backward move is requried.
  723.  
  724. poke[b] address,n
  725. The word (or byte if pokeb) is put into memory at address.
  726. Words are stored in low,high byte order.
  727. The peek function retrieves values from memory.
  728.  
  729. read[b] v [,...]
  730. Reads a value from the current restore address and puts it into the specified variable. 
  731. The restore address is incremented by 2 (1 if readb).
  732.  
  733. restore address
  734. Sets the restore address, to be used by the next read command.
  735.  
  736. Note: The read command reads words/bytes from memory whereas the read function reads 
  737. bytes from a file or device.
  738.  
  739. Example: proc draw_pic(pic_address)
  740.              {
  741.              restore pic_address                ;start of picture data.
  742.              lx=-1
  743.  
  744.              loop:
  745.              read x,y                           ;get x,y coordinates.
  746.              if x=-1 then return
  747.              if lx>0 then line lx,ly TO x,y
  748.              lx=x:ly=y
  749.              goto loop
  750.              }
  751.  
  752. space n
  753. Defines a work area of n bytes. n must be a constant value at compile time.
  754. All bytes are set to 0 by default. 
  755. space is identical to using datab 0 n times.
  756.  
  757. If defining space for a variable or buffer area then it is preferred that you define 
  758. the work area using: label ? n   
  759. n bytes will be reserved in memory, not part of the code.
  760.  
  761. Examples: table: space 200   ;puts 200 bytes of 0 into the FAST program.
  762.  
  763.           table ? 200        ;reserves 200 bytes in the variable area.
  764.                              ;the 200 bytes will contain undefined values.
  765.  
  766. PROCEDURE
  767.  
  768. Procedures and Functions are exactly the same in FAST. The 3 words function, procedure 
  769. and proc are allowed to define procedures (or functions, whatever you call them).
  770.  
  771. function name [ (var [,...] ) ] statement
  772.  
  773. A function is given a name, an optional number of parameters and a statement.
  774.  
  775. Example: function confirm (default)
  776.              {
  777.              print dos "Press Y to confirm [";
  778.              if default then print dos "Y"; else print dos "N";
  779.              print dos "] ";
  780.              bad_key:
  781.              wait for keypressed
  782.              k=lcase key
  783.              if k='y' then return 1
  784.              if k='n' or k=27 then return 0
  785.              if k=13 then return default
  786.              goto bad_key
  787.              }
  788.  
  789. The confirm function can be used in several different ways...
  790.  
  791. confirm                  ;used as a procedure (ie ignores the return value).
  792.                          ;no parameter is specified therefore 'default' is undefined.
  793. confirm(1)               ;used as a procedure, the return value will be lost.
  794. x=confirm(0)             ;x=confirm 1 (yes) or 0 (no).
  795. if confirm(1) then stop  ;if press Y or ENTER then stop.
  796.  
  797. Functions must be defined before they are used or a compiler error will result.
  798. SCREEN
  799.  
  800. cls
  801. Clears the current display page. 
  802. To clear a text screen set the colour to the default colour, eg 7 or 15?
  803. To clear a graphics screen set the colour to 0.
  804.  
  805. curpos=n
  806. Sets the cursor position where n = y*256 + x.
  807. The function to determine where the cursor is is also called curpos.
  808.  
  809. cursor y,x
  810. Sets the cursor position used by the print dos command.
  811.  
  812. curtoloc
  813. Sets the print location variable to the same screen position as the cursor.
  814.  
  815. locate y,x
  816. Sets the locpos (print location variable) to row y, column x.
  817. Locate is a nicer way of saying: locpos=y*160+x*2
  818.  
  819. loctocur
  820. Sets the cursor position to the same as the current print location (locpos).
  821.  
  822. page n
  823. Sets the current screen page, see the screen command for the number of pages in each 
  824. display mode. A CGA or compatible graphics card as 4 pages of 80*25 colour text 
  825. screens.
  826. The first page is always 0.
  827.  
  828. print options
  829. The print command is used to print text and numbers to the screen or printer.
  830.  
  831. Two other print commands exist: prints command - prints characters to the screen.
  832.                                 printm function - prints characters "intelligently".
  833.  
  834. The following print commands are available, they are also variations on print:
  835.  
  836. ┌─────────────────────────────────────────────────────────────────────────────────────┐
  837. │              Direct screen printing, options: cr tab chr , ;                        │
  838. │ print        Numbers are printed in decimal form.                                   │
  839. │ printb       Numbers are printed in 3 digit byte form: 000                          │
  840. │ printh       Numbers are printed in hexadecimal: 0000                               │
  841. │ printhb      Numbers are printed in hexadecimal: 00                                 │
  842. ├─────────────────────────────────────────────────────────────────────────────────────┤
  843. │              Print using DOS function calls, options: cr lf tab chr ;               │
  844. │ print dos    Printing using the DOS function calls.                                 │
  845. │ print bios   Printing using the DOS function calls (provided for compatibility).    │
  846. ├─────────────────────────────────────────────────────────────────────────────────────┤
  847. │ sprint       Super fast printing using the sppos command, options: cr chr ;         │
  848. ├─────────────────────────────────────────────────────────────────────────────────────┤
  849. │ lprint       Printing to the printer, options: cr lf ff tab chr ;                   │
  850. └─────────────────────────────────────────────────────────────────────────────────────┘
  851.  
  852. cr  = carriage return (print assumes cr includes lf).
  853. lf  = line feed
  854. ff  = form feed (new page).
  855. tab = moves cursor to next column (8 character columns).
  856. chr = print a character, eg: print chr 65 - prints 'A'.
  857. ;   = don't print on a new line, ie: suppress automatic cr and lf.
  858. ,   = moves cursor to next column (16 character columns).
  859.  
  860. Note: Comments (;) are not allowed after print because ; is a print option.
  861.  
  862. Examples: print "Hello"                  - "Hello", printing will start on next line.
  863.           print "Hello";                 - "Hello", printing resumes after the "o".
  864.           printh bios "Address = ";mem   - "Address = A23F"
  865.           lprint count;" lines output."  - "50 lines output."
  866.           print "line1" cr "line2" cr    - "line1" cr/lf "line2" cr/lf
  867.           print x tab y , chr peekb m    - "10      12                      A"
  868.           print chr peekb m;
  869.  
  870. screen n
  871. Sets the screen display to any type, including support for HGA, MDA, CGA, EGA, VGA and 
  872. any others which use the BIOS INT 10h for setting video modes.
  873. mode should be used in conjunction with screen to set graphics modes.
  874.  
  875.  ┌───────────────────────────────────────────────────────────────────┐
  876.  │  n    Type   Resolution   Adapter(s)     Colours    Video Segment │
  877.  ├───────────────────────────────────────────────────────────────────┤
  878.  │  0     T      40 x 25     All but MDA    16 gray         B800     │
  879.  │  1     T      40 x 25     All but MDA  16 fore/8 back    B800     │
  880.  │  2     T      80 x 25     All but MDA    16 gray         B800     │
  881.  │  3     T      80 x 25     All but MDA  16 fore/8 back    B800     │
  882.  │  4     G     320 x 200    All but MDA        4           B800     │
  883.  │  5     G     320 x 200    All but MDA      4 gray        B800     │
  884.  │  6     G     640 x 200    All but MDA        2           B800     │
  885.  │  7     T      80 x 25     HGA,MDA,EGA       b/w          B000     │
  886.  │  8     G     160 x 200       PCjr           16           B000     │
  887.  │  9     G     320 x 200       PCjr           16           B000     │
  888.  │ 10     G     640 x 200       PCjr            4           B000     │
  889.  │ 11     R  (internal to EGA)                                       │
  890.  │ 12     R  (internal to EGA)                                       │
  891.  │ 13     G     320 x 200       EGA            16           A000     │
  892.  │ 14     G     640 x 200       EGA            16           A000     │
  893.  │ 15     G     640 x 350       EGA            b/w          A000     │
  894.  │ 16     G     640 x 350       EGA            16           A000     │
  895.  └───────────────────────────────────────────────────────────────────┘
  896.  
  897. scroll [down] x1,y1,x2,y2,n
  898. Scrolls the area up (down if specified) n rows. If n=0 the area is cleared. The current 
  899. colour will be the default for the blank line on the screen.
  900. x1,y1 is the top left hand corner, x2,y2 is the bottom right.
  901.  
  902. Examples: scroll 0,0,24,79,1     ;scroll entire screen up 1 line.
  903.           scroll 10,20,16,80,0   ;clear a window.
  904.  
  905. sppos
  906. Sets the SI register for super fast screen printing using the command: sprint. The SI 
  907. register can be manipulated by other FAST commands and so use sppos and sprint 
  908. together.
  909.  
  910. Example: sppos
  911.          m=start_file
  912.          while peekb m sprint chr peekb m;:m++
  913.  
  914. There are 2 other fast print commands: prints and printm (printm is a function), 
  915. neither command is related to sppos but both offer alternative fast printing.
  916. SOUND
  917.  
  918. beep
  919. Prints the BELL (character 7) to standard output, ie: print dos chr (7);
  920.  
  921. noise count,frequency
  922. Produces a noise at the specified frequency. The count represents a time that the noise 
  923. will last for, 20000 is approximately 1 second on a 4.77mhz PC.
  924. The noise is not automatically turned off after it finishes, use the command noise off.
  925. The frequency is calculated as: frequency = 1,331,000 / real frequency.
  926. Example: 1,331,000 / 440 Hz = 3025, noise 20000,3025 = 440hz for 1 second.
  927.  
  928. noise off
  929. Turns the speaker off.
  930.  
  931. sound duration,frequency
  932. Turns the speaker on, producing a noise at the specified frequency.
  933. Duration is the number of interupts (1/18.2 second intervals) the sound will last for 
  934. before automatically being turned off. Duration is a FAST variable and can be set like 
  935. a normal variable, eg: duration=1. After every clock interupt the duration variable 
  936. will be decremented by 1, until 0.
  937.  
  938. STRING
  939.  
  940. asciiz n
  941. Changes the end character of the string at address n to 0, so the string can be used as 
  942. a filename by the FAST file commands.
  943. The string must be defined using the string command, strings are input from the 
  944. keyboard using the inputs command, the compiler directive #inpend can be used to 
  945. automatically make the string end character 0 (the default is 13 - carriage return).
  946.  
  947. inputs n
  948. Simple input from the keyboard at the current cursor position. n is a label or address 
  949. referencing a string as defined by the string command.
  950. A set of extended input commands are provided in the extinput.fi include file, the 
  951. editing is much nicer but the programs add about 1K to the code.
  952.  
  953. string n
  954. Defines an area in memory for a string.
  955.  
  956. A string is defined as follows: maximum length    ;same as n
  957.                                 current length    ;0 by default
  958.                                 string            ;0's by default
  959.                                 end_character     ;0 by default
  960.  
  961. If a string is input using the inputs command then the end character will be 13 by 
  962. default (can be changed using the #inpend compiler directive).
  963.  
  964. Example: filename: string 40    ;memory at address filename = 40,0, 0*40, 0
  965.  
  966. SYSTEM
  967.  
  968. call address
  969. The code at the specified address is executed.
  970. If the address is segment|address then an inter-segment call is done (call far) and a 
  971. far return must be done (retf).
  972. If the address does not specify a segment then the current code segment is used, a near 
  973. return must be used to return (ret).
  974.  
  975. clocks n
  976. Sets the new timer tick frequency to 1,193,181 / n.
  977. Changing the computers interupt frequency will effect the computers time (and possibly 
  978. other, more important things).
  979.  
  980. Example: clocks 29830   ;1193181/40 = 29830
  981.          on int 1
  982.              {
  983.              ;this code will be done 40 times a second.
  984.              }
  985.          ... program ... gets interupts every 40th of a second.
  986.  
  987. To reset clocks to 18.2 second intervals then use: clocks 0  (1193181/18.2 = 65536)
  988.  
  989. disable interupts
  990. Disables all interupts, including timer, keyboard and other maskable interupts.
  991. This command should probably only be used when using the out command and in function 
  992. for controlling the computers hardware (same as ASM: cli).
  993.  
  994. dos n1 [(n2)]
  995. Performs DOS function calls (int 21h).
  996. * n1 & n2 are hexadecimal numbers, regardless of definition. *
  997.  
  998. Example: dos 4d (0)     ;same as ASM: mov ax,4d00h, int21h.
  999.  
  1000. enable interupts
  1001. Enables all interupts (same as ASM: sti).
  1002.  
  1003. execute filename,n
  1004.  
  1005. halt
  1006. Halts the CPU using the assembler HALT instruction. This command can be used for timing 
  1007. and synchronisation. HALT halts the CPU until the next interupt.
  1008.  
  1009. inline n [,...]
  1010. Stores the byte values n in memory.
  1011. inline is exactly the same as the datab command, inline should be used when storing 
  1012. machine code instructions for ease of code reading.
  1013.  
  1014. int n
  1015. Calls the interupt handler. n ranges from 0 to 255.
  1016. To set or get an interupt vector address then use the getint and setint commands.
  1017. * n is a hexadecimal number, regardless of definition. *
  1018. A description of the IBM PC interupts can be found in most Technical Reference manuals 
  1019. or IBM PC Programmers Books.
  1020.  
  1021. Example: int 10         ;means INT 16 decimal.
  1022.  
  1023. iret
  1024. Interupt return, same as assembler: iret.
  1025.  
  1026. jump address
  1027. The program starts executing code at the address.
  1028.  
  1029. on critical
  1030.  
  1031. on debug statement
  1032. Any program lines that are compiled while debugging is on (#debug on) will execute the 
  1033. current on debug statement first.
  1034. If no on debug statement is defined the default statement tests for the break key.
  1035. Note: Debugging must be turned off while the compiler compiles the on debug command.
  1036.  
  1037. on int n statement
  1038. Sets one of FAST's 12 interupts to perform a statement. n ranges from 1 to 12.
  1039. Each interupt is run by the system clock interupt (18.2 times per second).
  1040. FAST's 12 interupts are timer only and not to be confused with the computers 256 
  1041. interupts or DOS's functions. FAST's interupts all join themselves to int 08h.
  1042. The stop int command will stop any of the 12 interupts from processing.
  1043.  
  1044. Note: DOS functions and any FAST commands which use DOS functions (file comamnds and 
  1045. some others) must not be used within the on int statement. There are some exceptions 
  1046. but special checks must be made before DOS functions can be done within interupts. See 
  1047. the example program tsr.f, this shows are interupts can be used for Terminate and Stay 
  1048. Resident programs.
  1049. on int can be used to give your program real time response and smooth action.
  1050. Eg: Running a game on different speed computers.
  1051.  
  1052. on idle statement
  1053. The idle interupt is intercepted by the on idle command (int 28h).
  1054. DOS calls the idle statement when waiting for keyboard input.
  1055. To call the idle statement from within your own programs while idle then use the 
  1056. command: int 28h
  1057. stop idle restores the interupt to its state before on idle was used.
  1058. on idle can be used to detect when DOS is not doing anything, see the example program 
  1059. tsr.f for an example.
  1060.  
  1061. on key n statement
  1062. When the specified key is pressed the statement is executed. n ranges from 32 to 127.
  1063. n is the ascii value for the keypressed, run the hexd utility to get the key code.
  1064. FAST will automatically use interupt vector 09 (keyboard interupt).
  1065.  
  1066. on scan n statement
  1067. When the specified key is pressed the statement is executed. n ranges from 0 to 132.
  1068. n is the scan code for the key, run the hexd utility to get the scan code.
  1069. FAST will automatically use interupt vector 09 (keyboard interupt).
  1070.  
  1071. on trace statement
  1072.  
  1073. out n1,n2
  1074. Same as the assembly command out, the value n2 is sent out the IO port n1.
  1075. The in function reads IO ports.
  1076.  
  1077. pop var [,...]
  1078. Pops the last pushed value from the stack and assigns the value to a variable.
  1079. All push-pop commands must relate to each other exactly, never push a value without 
  1080. poping it later. Never leave values on the stack within a subroutine (ie: push without 
  1081. pop).
  1082.  
  1083. popall
  1084. Pops all the computers registers from the stack, used in conjunction with pushall.
  1085.  
  1086. psp n
  1087. Sets the current Program Segment Prefix (PSP) to point to the segment n.
  1088. The default PSP segment for any FAST program is the same as the code segment because 
  1089. FAST uses .com files which have only one program/code segment.
  1090. Each program run under DOS has a PSP, the PSP segment contains a 128 byte block of 
  1091. information for DOS. For .com files the PSP segment = the Code Segment (CS). The PSP 
  1092. info is stored at address CS:0000 thru CS:007F
  1093. See example program tsr.f for using the psp command and psp function.
  1094.  
  1095. push n [,...]
  1096. Pushes the word value onto the stack. pop retrieves values off the stack in the 
  1097. opposite order, ie: Last In First Out.
  1098.  
  1099. pushall
  1100. Pushes all the computers registers onto the stack, to be retrived later using the 
  1101. popall command.
  1102.  
  1103. Registers pushed (in order): AX BX CX DX BP SI DI ES DS.
  1104. Registers not pushed: SS SP CS (stack and code segment)
  1105.  
  1106. reg rr=n [,...]
  1107. Sets any of the computers registers to n.
  1108. rr = AX BX CX DX SI DI BP SP DS ES CS.
  1109. n should be a constant or variable. If setting the AX register then set it last.
  1110.  
  1111. reset interupts
  1112. Resets the interupts 08 and 09 if they were automatically set by FAST. FAST will 
  1113. automatically use these interupts if your program uses the on int, on key or on scan 
  1114. commands.
  1115. FAST tells you if these interupts are used after compiling a program.
  1116. The stop and terminate commands automatically reset interupts, see the tsr.f (terminate 
  1117. and stay resident skeleton program) for using interupts.
  1118.  
  1119. retf
  1120. Return Far, same as the assembly instruction: retf
  1121.  
  1122. setint n to address
  1123. The interupt vector n is set to address.
  1124. There are 256 interupts vectors, 0 to 255, consult a technical reference manual for a 
  1125. description on each interupt.
  1126. * n1 & n2 are hexadecimal numbers, regardless of definition. *
  1127.  
  1128. shell string
  1129. Passes the string to DOS using the COMMAND.COM program.
  1130. Includes automatic error checking.
  1131.  
  1132. stack=n
  1133. Sets the stack pointer to address n (register SP = n).
  1134. The stack function = the current stack address.
  1135.  
  1136. stop critical
  1137.  
  1138. stop debug
  1139. Stops the current on debug statement from being executed for every line which was 
  1140. compiled while debugging was on (#debug on).
  1141. Do not confuse this command with the compiler directive #debug off.
  1142.  
  1143. stop idle
  1144. Stops the current on idle statement by restoring the old interupt vector to its 
  1145. previous state (DOS does nothing during the on idle interupt by default but some TSR 
  1146. programs may take control of it).
  1147.  
  1148. stop int n
  1149. Stops the FAST interupt from processing, n ranges from 1 to 12.
  1150.  
  1151. stop key n
  1152.  
  1153. stop scan n
  1154.  
  1155. stop trace
  1156. Stops the current on trace statement.
  1157.  
  1158. timer=n
  1159. Sets the low part of the system timer to n. This effects the computers current TIME.
  1160.  
  1161. VARIABLES
  1162.  
  1163. const label=n [,...]
  1164. Assigns a constant value to a label. The value is a word value, 0 to 65535.
  1165.  
  1166. const32 label=n [,...]
  1167. Assigns a constant value to a label. The value is a double word value, 0 to 4294967295.
  1168.  
  1169. let var=n
  1170. Assigns value n to the variable. The word let is optional.
  1171.  
  1172. swap var1,var2
  1173. Swaps variable values var1 and var2. 
  1174. The variables can be unsigned or signed 16 bits only.
  1175.  
  1176. unsigned var [,...]
  1177. Defines an unsigned variable: 16 bits, range 0 to 65,535.
  1178.  
  1179. var var [,...]
  1180. Defines a signed variable: 16 bits, range -32,768 to 32,767.
  1181.  
  1182. var32 [,...]
  1183. Defines an unsigned variable: 32 bits, range 0 to 4,294,967,295
  1184.  
  1185. WINDOW
  1186.  
  1187. close window
  1188. Closes the last opened window, if no window is open then an error will occur: 6 Invalid 
  1189. handle.
  1190. Includes automatic error checking.
  1191.  
  1192. close windows
  1193. Closes all open windows, does nothing if no windows are open.
  1194.  
  1195. open window n
  1196. Opens a window on the screen. Windows can only be used in 80 column colour text mode, 
  1197. this is the default for almost all applications so this should be a small limitation.
  1198. The close window command closes the most recently opened window.
  1199.  
  1200. If open window gets an error then this is handled by automatic error checking.
  1201. Error 4 occurs if no more windows can be opened - No more handles available (20 max).
  1202. Error 8 occurs if no more window memory - Insufficient Memory, increase the size using 
  1203. #window memory, the defaults size is 1500 bytes.
  1204.  
  1205. n is an address which points to a description of the window, defined as follows:
  1206.  
  1207. ┌─────────────────────────────────────────────────────────────────────────────────────┐
  1208. │ mode            0=window with boundary only (used for creating standard windows).   │
  1209. │                 1=window with top line for window heading, used by select function. │
  1210. │                   Options can be selected in the window by pressing enter or the    │
  1211. │                   first letter of the option, eg: M for Menu.                       │
  1212. │                 2=Same as mode 1 but options must be selected by pressing Enter.    │
  1213. ├─────────────────────────────────────────────────────────────────────────────────────┤
  1214. │ options         Number of selectable options in the window/menu, used by mode 1 & 2.│
  1215. ├─────────────────────────────────────────────────────────────────────────────────────┤
  1216. │ x1,y1           top left hand corner of window.                                     │
  1217. │ x2,y2           bottom right hand corner of window.                                 │
  1218. ├─────────────────────────────────────────────────────────────────────────────────────┤
  1219. │ colour          colour for the window (see the colour command).                     │
  1220. ├─────────────────────────────────────────────────────────────────────────────────────┤
  1221. │ [text [...] ]   All information here will be printed within the window.             │
  1222. │                 Use the following control codes:                                    │
  1223. │                   20,n    ;sets the colour to n for text.                           │
  1224. │                   22,x,y  ;sets the text location to x,y (relative to window).      │
  1225. │                 See example below.                                                  │
  1226. ├─────────────────────────────────────────────────────────────────────────────────────┤
  1227. │ eof             End of window definition (character 26 or 1A hex).                  │
  1228. └─────────────────────────────────────────────────────────────────────────────────────┘
  1229.  
  1230. Example: open window win_status      ;Open a typical status window.
  1231.          ...                         ;Print details inside window.
  1232.          wait for key=27             ;user must press escape.
  1233.          close window
  1234.  
  1235.          win_status:
  1236.          datab 0,0,40,14,79,24,15       ;mode, options, x1,y1, x2,y2, colour
  1237.          datab 22,1,4,'System Status'   ;text...
  1238.          datab 26                       ;eof.
  1239.  
  1240. Note: The print command does not use the current windows origin for printing, the whole 
  1241. screen is used as always.
  1242. COMMAND SUMMARY
  1243.  
  1244. FAST FUNCTIONS
  1245.  
  1246. COLOUR
  1247.  
  1248. colour
  1249. The current colour, as set by the colour command.
  1250. colour is a FAST system variable.
  1251.  
  1252. CONTROL
  1253.  
  1254. input[h][b]
  1255. Gets numeric input from the keyboard. If escape is pressed then the result is 0.
  1256.  
  1257. Examples: x=input       ;number, 0 to 65535.
  1258.           x=inputhb     ;number, 00 to FF (hexadecimal byte).
  1259.           x=inputb      ;number, 0 to 255.
  1260.  
  1261. key
  1262. The ascii value of the last key pressed (0 if no key pressed).
  1263. The key is removed from the keyboard buffer.
  1264.  
  1265. keypressed
  1266. Returns 1 if there are any keystrokes waiting in the buffer, 0 if none.
  1267.  
  1268. keyscan
  1269. Returns a word value (16 bits), the high byte is the scan code, the low byte is the key 
  1270. code. The key is removed from the keyboard buffer.
  1271.  
  1272. Example: ks=keyscan
  1273.          kk=low ks      ;key code
  1274.          ss=high ks     ;scan code
  1275.  
  1276. scan
  1277. The scan code of the last key pressed (0 if no key pressed).
  1278. The key is removed from the keyboard buffer.
  1279.  
  1280. COMMUNICATIONS
  1281.  
  1282. serial_status
  1283. Returns the status of serial port 1 for the line and modem.
  1284.  
  1285. line_status  = high serial_status   (high byte)
  1286. modem_status = low  serial_status   (low byte)
  1287.  
  1288.  AH (Line status)
  1289.  ----------------
  1290.    Bit  7 6 5 4 3 2 1 0
  1291.         1 . . . . . . .       Time-out error
  1292.         . 1 . . . . . .       Transfer shift register empty
  1293.         . . 1 . . . . .       Transfer holding register empty
  1294.         . . . 1 . . . .       Break-detect error
  1295.         . . . . 1 . . .       Framing error
  1296.         . . . . . 1 . .       Parity error
  1297.         . . . . . . 1 .       Overrun error
  1298.         . . . . . . . 1       Data ready
  1299.  
  1300.  AL (Modem status)
  1301.  -----------------
  1302.    Bit  7 6 5 4 3 2 1 0
  1303.         1 . . . . . . .       Received line signal detect
  1304.         . 1 . . . . . .       Ring indicator
  1305.         . . 1 . . . . .       Data set ready
  1306.         . . . 1 . . . .       Clear to send
  1307.         . . . . 1 . . .       Change in receive line signal detected
  1308.         . . . . . 1 . .       Trailing edge ring detector
  1309.         . . . . . . 1 .       Change in data set ready
  1310.         . . . . . . . 1       Change in clear to send
  1311.  
  1312. Example: ss=serial_status
  1313.          line_status=high ss
  1314.          modem_status=low ss
  1315.          if modem_status and 16 then print "Clear to Send"      ;16=2^4
  1316.  
  1317. serial_send n
  1318. Sends a byte to the serial port, COM1. serial_send uses the BIOS int 14h services to 
  1319. send characters.
  1320.  
  1321. To receive characters, use enable serial.
  1322.  
  1323. Example: See enable serial for a coms program using FAST.
  1324.          The phone.f program is a complete terminal emulator with file transfers. 
  1325.          Only available to registered users.
  1326.  
  1327. serial_seg
  1328.  
  1329. serial_size
  1330.  
  1331. serial_head
  1332.  
  1333. ERROR HANDLING
  1334.  
  1335. error
  1336. The current error number.
  1337. error is a FAST system variable.
  1338.  
  1339. errorv
  1340. The address of the current error handler.
  1341. errorv is a FAST system variable.
  1342.  
  1343. FILE
  1344.  
  1345. cdisk
  1346. The current disk drive. 0=A: 1=B: 2=C: etc
  1347.  
  1348. dta [offset] [segment]
  1349. The current disk transfer address offset or segment value.
  1350. This address is used by the find first and find next commands to store file 
  1351. information, unfortunately it is also the same address as the DOS command line area, 
  1352. ie: CS:0080 to CS:00FF. If you wish to store check for command line parameters then you 
  1353. should check them before using the find first or find next commands, or move the 
  1354. command line memory somewhere else: eg: moveb 128 from 80h to work_area
  1355.  
  1356. Example: dta_off=dta offset
  1357.          dta_seg=dta segment
  1358.  
  1359. handle #n
  1360. The actual DOS handle number of FAST's file #1-#12.
  1361. See the handle command for more information.
  1362.  
  1363. read #n,length to address
  1364. Returns the number of bytes read. Reads length number of bytes from the open file into 
  1365. memory at the specified address.
  1366. The file seek pointer is updated automatically, therefore the next read command will 
  1367. read bytes following the ones just read.
  1368. Includes automatic error checking.
  1369.  
  1370. Example: rn=read #1,10 to work_area     ;read 10 bytes from file #1.
  1371.          if rn<>10 then error 13        ;error if 10 bytes not read.
  1372. GRAPHICS
  1373.  
  1374. hit x,y
  1375.  
  1376. point x,y
  1377. Returns the colour value of the pixel at coordinate x,y (graphics modes only).
  1378. For black and white graphics modes the colour value is 1 for dots and 0 for spaces.
  1379. See the plot command.
  1380.  
  1381. MATH
  1382.  
  1383. abs n
  1384. Returns the absolute value of n, assuming n is a signed number (two's complement).
  1385.  
  1386. Example: print 2        ;prints 2
  1387.          print -2       ;prints 2
  1388.          print 65534    ;prints 2    (65536-65534)
  1389.  
  1390. high n
  1391. The high part of n, if n is a word value (16 bits) then the high 8 bits are returned as 
  1392. a byte value (0 to 255). If n is a 32 bit variable then the high 16 bits are returned 
  1393. as a word value (0 to 65535).
  1394.  
  1395. Example: print high 16384       ;prints 64. (16384/256 = 64)
  1396.  
  1397. low n
  1398. The low part of n, if n is a word value (16 bits) then the low 8 bits are returned as a 
  1399. byte value (0 to 255). If n is a 32 bit variable then the low 16 bits are returned as a 
  1400. word value (0 to 65535).
  1401.  
  1402. Example: print low 16384        ;prints 0. (remainder of 16384/256 = 0)
  1403.  
  1404. mod
  1405.  
  1406. not n
  1407. Returns 0 if n<>0 and 1 if n=0.
  1408.  
  1409. rleft[z] n
  1410. Returns the value of n, rotated left by 1 bit.
  1411. rleft will move bit 16 into bit 1.
  1412. rleftz will move 0 into bit 1 (rotate left with zero).
  1413.  
  1414. rnd
  1415. Random number (word value). The number is generated using a random seed set by the 
  1416. randomize command.
  1417.  
  1418. rright[z] n
  1419. Returns the value of n, rotated right by 1 bit.
  1420. rright will move bit 1 into bit 16.
  1421. rrightz will move 0 into bit 16 (rotate right with zero).
  1422.  
  1423. MEMORY
  1424.  
  1425. allocate n
  1426. Allocates n paragraphs of memory and returns the segment number.
  1427. A paragraph of memory is 16 bytes.
  1428. A block of memory allocated using the allocate function can be useful for loading 
  1429. files, work areas, storing data or anything.
  1430. Includes automatic error checking, ie: Not enough memory. If a program allocates a 
  1431. memory segment then overwrites the segment boundaries then a severe error will occur.
  1432.  
  1433. Example: text_seg=allocate 4096         ;4096*16 = 65536 bytes (64K).
  1434.          load "file",text_seg|0         ;load file into text_seg|0 memory
  1435.  
  1436. compare[b] n at address1 with address2
  1437. Compares n words (or bytes if compareb) at address1 with address2. If both memory areas 
  1438. are the same then the result is 0, otherwise the first mismatched address is returned.
  1439.  
  1440. Note: If address1=0 and 0 is returned this could mean that the areas matched or that 
  1441. the first byte was mismatched.
  1442.  
  1443. Example: diff=compare 2000 from video|2 with old_video|2
  1444.          if diff then update_new_screen
  1445.  
  1446. peek[b] address
  1447. Returns the word (byte if peekb) value stored at the address. Word values are always 
  1448. stored in low byte,high byte order.
  1449. If peek is used in a 32 bit expression (ie: var32=peek x) then a 32 bit value is 
  1450. returned.
  1451.  
  1452. search[b] length from address for n
  1453. Returns the address of the first word (byte if searchb) which equals n, if n is not 
  1454. found then 0 is returned.
  1455.  
  1456. Note: If the first word in the string is at address 0 and it equals n then 0 will be 
  1457. returned (ie: same value as if word was not found).
  1458.  
  1459. Example: found = searchb table_len from table for key
  1460.          if found then process_table(found)
  1461.  
  1462. SCREEN
  1463.  
  1464. curpos
  1465. Returns the current cursor postion as a word value, the x (column) position is the low 
  1466. byte value and the y (row) position is the high byte value.
  1467. Example: pos=curpos     ;pos=y*256+x
  1468.  
  1469. page
  1470. The current display page, the first page = 0.
  1471.  
  1472. printm address,n [,0]
  1473. Prints the characters on the screen stored at address and returns the address for the 
  1474. start of the next characters or line.
  1475.  
  1476. This function is ULTRA FAST for printing lines of text or file names etc on the screen 
  1477. at the current print (locpos) position using the current colour.
  1478. The colour can be left unchanged on the screen by appending the option ,0.
  1479.  
  1480. n is the width of the column of text to be printed, printm handles tabs and also fills 
  1481. the rest of the line with spaces if necessary.
  1482. The end character is either 0, 13 or 26 (null, cr or eof).
  1483.  
  1484. If a carriage return is encountered and the next character is a line feed then it is 
  1485. automatically skipped, returning the offset for the byte after the line feed.
  1486. If an end of file marker is found then the offset returned will remain at the address 
  1487. of the end of file character, hence it never goes over the edge.
  1488.  
  1489. Example to print an entire screen of text.
  1490.  
  1491. for y=0 to 24
  1492. locate y,0
  1493. mem=printm edit_seg|mem,80      ;print 80 character wide block, from edit_seg|mem
  1494. next y
  1495.  
  1496. Note: null            =  0
  1497.       carriage return = 13
  1498.       line feed       = 10
  1499.       end of file     = 26
  1500.  
  1501. scrchr y,x
  1502. The ascii value of the character at screen location y,x (row,column).
  1503.  
  1504. screen
  1505. The current screen mode, set by the screen command.
  1506.  
  1507. locpos
  1508.  
  1509. mono
  1510.  
  1511. video
  1512.  
  1513. SOUND
  1514.  
  1515. duration
  1516.  
  1517. STRING
  1518.  
  1519. digits n
  1520. Returns the number of digits in the printed form of the number n.
  1521.  
  1522. Examples: print digits 1        ;prints 1
  1523.           print digits 295      ;prints 3
  1524.           print digits 40000    ;prints 5
  1525.  
  1526. getint n
  1527. Returns the segment|offset address of the interupt vector n as a 32 bit value. The 
  1528. segment is the high word and the offset is the low word value.
  1529.  
  1530. Example: int9=getint 9          ;int9 must be a 32 bit variable.
  1531.          int9_offset=low int9
  1532.          int9_segment=high int9
  1533.  
  1534. lcase n
  1535. Returns the lowercase value of the ascii character n.
  1536.  
  1537. ucase n
  1538. Returns the uppercase value of the ascii character n.
  1539.  
  1540. SYSTEM
  1541.  
  1542. carry
  1543. 1 if the carry flag is set, 0 if not.
  1544.  
  1545. in m
  1546. Returns the byte value from IO port n.
  1547. This is the same as the assembler in function.
  1548.  
  1549. psp
  1550. Returns the current PSP segment (Program Segment Prefix).
  1551. The default PSP for any running program is the same as the code segment.
  1552. The PSP command and function should be used within TSR programs (see the tsr.f skeleton 
  1553. program).
  1554.  
  1555. reg register
  1556. Returns the value of any register, either: AX BX CX DX DI SI BP SP ES DS CS.
  1557.  
  1558. stack
  1559. Returns the current stack address (register SP).
  1560.  
  1561. timer
  1562. Returns the value of the current time, in 18.2 second units.
  1563. The timer value can range from 0 to 1572480 so the timer function should be used with a 
  1564. 32 bit variable, eg: var32=timer
  1565.  
  1566. Example: if timer = 240000 then the time = 240000 / 18.2 seconds from midnight.
  1567.          240000/18.2 = 13187 / 60 = 220 minutes. 220/60 = 3.66 hours.
  1568.          Therefore 240000, time = 3:40am
  1569.  
  1570. usr address
  1571. Calls the subroutine at the address (same as call command) and returns the value in the 
  1572. AX register. usr could be used to call an assembly routine which returns a value.
  1573.  
  1574. ihere
  1575.  
  1576. WINDOW
  1577.  
  1578. menu n [,default]
  1579. Opens the window n (see open window command), the selection bar appears.
  1580. The value returned will be the option number, starting from 1. If the user presses 
  1581. escape the value = 0.
  1582. default is the default option to start the selection bar on, if no default is given 
  1583. then the selection bar starts on option 1.
  1584. The window is not closed, use close window.
  1585.  
  1586. select n [,default]
  1587. Same as the menu function except the window must be already open.
  1588. The window is not closed, use close window.
  1589.  
  1590. FUNCTION SUMMARY
  1591.  
  1592. FAST EXPRESSIONS
  1593.  
  1594. Maths expressions: + - * /
  1595.  
  1596. Comparisons: =  <  >  <>  <=  >=  above  below
  1597.  
  1598. Variable assignments: =  ++  --  +=  -=  *=  /=
  1599.  
  1600. Expressions: ( ... )
  1601.  
  1602. Operators: and  or  xor
  1603.  
  1604. COMPILER DIRECTIVES
  1605.  
  1606. #debug on/off
  1607. All commands compiled while debug is on will call the current on debug statement.
  1608. The default on debug statement simply tests for the break key.
  1609. Each line compiled while debug is on will use 5 extra bytes.
  1610.  
  1611. #else
  1612. Used in between #if and #endif. See #if for an example.
  1613.  
  1614. #endcode
  1615. The compile stops compiling - artificial end of program marker.
  1616.  
  1617. #endif
  1618. Ends the current #if compilation. See #if for an example.
  1619.  
  1620. #entry
  1621. Sets the entry point for the FAST program, the default entry point is the first line.
  1622.  
  1623. #errors on/off
  1624. Any FAST commands which include automatic error checking will set the error variable to 
  1625. the error number (0 if no error).
  1626. While errors on, all commands which check errors will also call the error handling 
  1627. routine if an error occurs.
  1628. By default, #errors is on.
  1629.  
  1630. Example: (a) without errors on: #errors off
  1631.              open #1,"pu.cfg"
  1632.              if error then error    ;if there was an error run the error handler.
  1633.  
  1634.          (b) with errors on: #errors on (also the defalut)
  1635.              open #1,"pu.cfg"
  1636.  
  1637. #if n
  1638. If n is true (not 0) then the following command(s) are compiled until a #else or #endif 
  1639. are encountered.
  1640.  
  1641. Example: #if ledger
  1642.            #include ledger.fi
  1643.            #if charts
  1644.              #include charts.fi
  1645.            #endif
  1646.          #else
  1647.            #include trans.fi
  1648.          #endif
  1649.  
  1650. Note: n must be a constant value.
  1651. Note: #if can be nested to 20 levels.
  1652.  
  1653. #include filename.ext
  1654. The compiler includes the specified file into the source file and compiles it.
  1655. The full filename must be specified, including the extension. Drive and Pathname are 
  1656. optional.
  1657.  
  1658. Note: Every include file uses 10k of memory while being compiled.
  1659. #inpend=n
  1660. Changes the default end character for the inputs command, the default is 13.
  1661. If inputs is used only to enter filenames then set #inpend=0, therefore all inputted 
  1662. strings will automatically have the correct end of filename marker: 0.
  1663. There can only be one #inpend value in any program, if more than one is defined then 
  1664. the last one is used.
  1665.  
  1666. #local
  1667. All variables used or declared within procedures and functions will be local to that 
  1668. procedure or function.
  1669.  
  1670. Example: #local
  1671.          proc do_one (x,y,z)
  1672.              {
  1673.              x=10:y=20:z=30
  1674.              }
  1675.  
  1676.          proc do_two (x,y,z)
  1677.              {
  1678.              x=11:y=21:z=31
  1679.              }
  1680.  
  1681. Both procedures have their own variables x,y & z.
  1682. In the symbol table these variables will appear as x$do_one, y$do_one, x$do_one and 
  1683. x$do_two, y$do_two, z$do_two.
  1684.  
  1685. #long
  1686. The compiler will compile all if-then-else commands using long jumps rather than short 
  1687. jumps. See #short
  1688.  
  1689. #para
  1690. Aligns the next address the compiler uses to store commands or data with the next  
  1691. paragraph boundary. A paragraph boundary is a multiple of 16 bytes.
  1692. This directive should only be used when data must be stored on a paragraph boundary.
  1693.  
  1694. #protect
  1695. The compiler will include special self checking code to detect if the .COM file has 
  1696. been tampered with (ie: by a virus). If a change is detected then a message will appear 
  1697. and the program is aborted.
  1698.  
  1699. #setdos v.xx
  1700. Sets the DOS version needed to run the FAST program.
  1701. Any version set below the current #setdos version will be ignored, eg: #setdos 1.00 
  1702. will be ignored because the default minimum is 2.00
  1703. #short
  1704. The compiler will compile all if-then-else commands using short jumps rather than long 
  1705. jumps. The advantages of using short jumps are speed and size.
  1706. FAST can sometimes use only 1 instruction with #short instead of two instructions with 
  1707. #long.
  1708. Typically set #short at the start of every program (including include files). If a 
  1709. short jump cannot be used then the compiler will give an error. Simply put a #long at 
  1710. the start of the offending if command and a #short just after the if command.
  1711.  
  1712. Example: #long
  1713.          if k='s' then
  1714.              {
  1715.              #short
  1716.              ;more than 128 bytes of commands...
  1717.              }
  1718.  
  1719. #stack memory n
  1720. Sets the stack memory size to n bytes. The default size is 1024 bytes.
  1721.  
  1722. #trace on/off
  1723. All commands compiled while trace is on will be made traceable. FAST will save a 
  1724. special file containing the trace data: program.ft (program=compiled program name).
  1725. A special program called FASTT must be used to run the program when tracing it.
  1726. Trace means to single step through a program while it is running.
  1727.  
  1728. Example: 1. Insert #trace on/off commands around the blocks of code you want to trace.
  1729.          2. Compile the program.
  1730.          3. Run "FASTT program".
  1731.  
  1732. Note: Each line compiled with trace on will use 1 extra byte.
  1733.  
  1734. #window memory n
  1735. Sets the window memory size to n bytes. The default size is 1500 bytes.
  1736. If the window commands are not used then FAST will automatically set the window memory 
  1737. size to 0 bytes.
  1738.  
  1739.  
  1740. Compiler Directive Defaults
  1741.  
  1742. The following is a list of how FAST is setup before compiling starts:
  1743.  
  1744.     #debug OFF
  1745.     #entry
  1746.     #errors on
  1747.     #inpend=13
  1748.     #setdos 2.00
  1749.     #stack memory 1024  ;set by FAST Maintenance
  1750.     #trace off
  1751.     #window memory 1500 ;set by FAST Maintenance
  1752.  
  1753. The following list is how FAST is setup before compiling each file:
  1754. (note options are restored to their original setting after including a file)
  1755.  
  1756.     #long
  1757. DIRECTIVE SUMMARY
  1758.  
  1759. #debug on/off
  1760. #else
  1761. #endcode
  1762. #endif
  1763. #entry
  1764. #errors on/off
  1765. #if n
  1766. #include filename.ext
  1767. #inpend=n
  1768. #local
  1769. #long
  1770. #para
  1771. #protect
  1772. #setdos v.xx
  1773. #short
  1774. #stack memory n
  1775. #trace on/off
  1776. #window memory n
  1777. INCLUDE FILES
  1778.  
  1779. cmd_line.fi
  1780.  
  1781. colour.fi
  1782.  
  1783. extinput.fi
  1784.  
  1785. fast32.fi
  1786.  
  1787. fhelp.fi
  1788.  
  1789. fsort.fi
  1790.  
  1791. keys.fi
  1792.  
  1793. ERROR MESSAGES
  1794.  
  1795.   0 Unknown Error (contact PCS)
  1796.  
  1797.   1 Syntax error
  1798.  
  1799.   2 Number out of range
  1800.  
  1801.   3 Word undefined
  1802.  
  1803.   4 Double definition of word
  1804.  
  1805.   5 Expected a string expression using "string" or 'string'
  1806.  
  1807.   6 Invalid parameter(s)
  1808.  
  1809.   7 Internal stack error - recovered ok
  1810.  
  1811.   8 Excess characters in line - ignored
  1812.  
  1813.   9 Out of table space - increase with -m option
  1814.  
  1815.  10 Missing comma
  1816.  
  1817.  11 Missing end of string - " or '
  1818.  
  1819.  12 Warning... deallocation of memory failed after include
  1820.  
  1821.  13 Out of memory, exceeded the 64K limit
  1822.  
  1823.  14 #ENDIF without #IF
  1824.  
  1825.  15 Divide by zero not allowed
  1826.  
  1827.  16 Severe error in UNDEF TABLE
  1828.  
  1829.  17 Out of memory for UNDEFINED words - increase with -m option
  1830.  
  1831.  18 Warning! Undefined label (0 used)
  1832.  
  1833.  19 Word defined in way which contradicts its use
  1834.  
  1835.  20 Too many compiler #IF statements, maximum is 20
  1836.  
  1837.  21 Severe error in LABEL TABLE
  1838.  
  1839.  22 Unknown compiler directive
  1840.  
  1841.  23 Bad digit (unrecognisable number)
  1842.  
  1843.  24 Missing #ENDIF
  1844.  
  1845.  25 No room to include file
  1846.  
  1847.  26 Too many labels - increase with -m option
  1848.  
  1849.  27 *not used*
  1850.  
  1851.  28 Missing ),] or }
  1852.  
  1853.  29 Data types mismatch, conflict between two words or double declaration
  1854.  
  1855.  30 Missing equals '='
  1856.  
  1857.  31 Incorrect syntax, wrong seperator
  1858.  
  1859.  32 Missing numeric expression
  1860.  
  1861.  33 Cannot use reserved word as variable or label
  1862.  
  1863.  34 Compiler error, optimisation data tables corrupt
  1864.  
  1865.  35 Expected either ON or OFF
  1866.  
  1867.  36 Illegal character
  1868.  
  1869.  
  1870.  
  1871. 100 Limit of 50 nested commands exceeded
  1872.  
  1873. 101 Cannot set CS register directly, use CALL SEGMENT|OFFSET
  1874.  
  1875. 102 Expected a valid file indicator - #n, n=1 to 12
  1876.  
  1877. 103 Wrong number of parameters for function or procedure
  1878.  
  1879. 104 Wrong type, expected a variable
  1880.  
  1881. 105 Absolute address expected - Eg SEG|OFF or OFF
  1882.  
  1883. 106 Wrong type, expected a label
  1884.  
  1885. 107 Too many ERROR jumps (compiler error)!
  1886.  
  1887. 108 Statement too long, reduce expressions to variables
  1888.  
  1889. 109 Too many files compiled, max=50
  1890.  
  1891. 110 Too many lines compiled, max=10389
  1892.  
  1893. 111 Code exceeds short jump range
  1894.  
  1895. 112 Invalid #SETDOS format: n.xx
  1896.  
  1897. 113 End of file: REPEAT statement(s) not closed
  1898.  
  1899. 114 End of file: WHILE statement(s) not closed
  1900.  
  1901. 115 End of file: IF-THEN-ELSE statement(s) not closed
  1902.  
  1903. 116 End of file: WAIT FOR statement(s) not closed
  1904.  
  1905. 117 End of file: ON GOTO/GOSUB statement(s) not closed
  1906.  
  1907. 118 End of file: PROCEDURE or FUNCTION declaration(s) not finished
  1908.  
  1909. 119 End of file: FOREVER statement(s) not closed or ENDFOR mismatch
  1910.  
  1911. 120 End of file: NEXT is missing from FOR loop
  1912.  
  1913. 121 End of file: Unknown Reason, check {}
  1914.  
  1915. 122 Nested procedure or function declaration not allowed
  1916.  
  1917.  
  1918. EXAMPLE PROGRAM DOCUMENTATION
  1919.  
  1920. clist
  1921. Print text files in two columns, using 17 characters per inch and 1/8" line spacing. 
  1922. The default settings are for epson compatible printers. Change the settings in the 
  1923. source file and recompile to suit your needs.
  1924.  
  1925. CLIST can be used for making hard copies of files when paper is in short supply or just 
  1926. to get more code on a page for easier debugging.
  1927.  
  1928. cmp
  1929. Compare two files by displaying any differences between the two files at all locations.
  1930. Each differnce is displayed as 'ADDR : B1 ! B2'.
  1931.  
  1932. All values are in hex. The address starts at 0. A file in excess of 64k is ignored.
  1933. ESC aborts while running. SPACE can be used to suspend the listing.
  1934.  
  1935. colour
  1936.  
  1937. compf
  1938. Compresses and uncompresses both FAST and ASM files.
  1939.  
  1940. Run COMPF: When asked for a file enter
  1941.  
  1942.     1) *.F to compress all FAST source files.
  1943.     2) *.ASM to compress all ASM source files.
  1944.  
  1945.     3) *.FX to uncompress all FAST source files.
  1946.     4) *.AX to uncompress all ASM source files.
  1947.  
  1948. Note: The file created (with the compressed data) is called _.FX or _.AX.
  1949.  
  1950. To compress a single file use its filename, eg WT.F; this will create a file
  1951. called WT.FX. Therefore to uncompress it use WT.FX as the file name.
  1952.  
  1953. Compf is a crude compression program, something like pkzip would be more suitable. 
  1954. However there can be added benefits to using compf and pkzip together. ie: compf all 
  1955. source files then pkzip the _.fx file.
  1956.  
  1957. cr
  1958. Counts the number of lines in any group of files (by counting carriage returns).
  1959.  
  1960. After entering CR you will be asked for the file(s), for multiple files use wild card 
  1961. characters, eg '*' & '?'.
  1962.  
  1963. d
  1964. Another directory command, 3 columns are displayed, sorted by name.
  1965. Directories are listed first, followed by files.
  1966.  
  1967. Examples: d           ;all files and directories.
  1968.           d \asm\     ;all files in the sub-directory \asm.
  1969.           d a:*.doc   ;all DOC files on drive A.
  1970.           d f         ;all files starting with F.
  1971.  
  1972. Press any key to suspend the directory - it scrolls fairly fast, escape to abort.
  1973. dl
  1974. A simple debugger which knows a little about FAST's memory areas and subroutines.
  1975. DL shows labels and the opcodes for any .COM file.
  1976.  
  1977. Syntax: DL program  (leave out the .COM)
  1978.  
  1979. The program DA is the same as DL except the it just creates a .ASM output file for 
  1980. assembling with SOFA - the .ASM file will need changes - upgrades will mean that DL/DA 
  1981. does everything, producing a ASM file 100% ok.
  1982.  
  1983. DA could be used once a FAST program has been completely written and debugged
  1984. for further optimising the program to run faster - using assembly language.
  1985.  
  1986. da
  1987. See dl.
  1988.  
  1989. demo
  1990. A demonstration of FAST.
  1991.  
  1992. dscr
  1993. Changes the print-screen button to save the screen image to a disk file.
  1994. When print-screen is pressed a popup box will appear asking for the filename.
  1995.  
  1996. edit
  1997. A DOS command line editor, allowing access to the last 16 commands entered.
  1998. The keys act the same as the normal DOS command line editor, when you press up or down 
  1999. then a popup menu appears with the last 16 selections: select one then press enter. The 
  2000. option can then be modified in the usual manner or executed by pressing enter.
  2001.  
  2002. ALT-X quits edit and frees up memory used (if no other TSRs loaded since EDIT). 
  2003. ALT-C clears the screen and resets the computer back to text mode.
  2004. CTRL-END clears to end of line from the cursor.
  2005.  
  2006. fastt
  2007. FAST TRACE utility to trace source files line by line.
  2008. See the compiler directive #trace for more instructions on tracing through a program.
  2009.  
  2010. Type 'FASTT program'. All the source files that were used to compile the program must 
  2011. exist in the current directory.
  2012.  
  2013. When tracing a program the full screen is used, pressing any key advances to the next 
  2014. line. If the scroll-lock light is on the FASTT will resume running the program as 
  2015. normal - until you take the scroll-lock light off.
  2016.  
  2017. Notes: FASTT uses 1 file handle for each source file that is actually traced, increase 
  2018.        the DOS file handles in the config.sys file if an error occurs.
  2019.        FASTT only works properly in the 80 column colour text mode.
  2020.  
  2021. ffind
  2022. Search for a string within specified files.
  2023. Type ffind with no parameters to see the current command line options.
  2024.  
  2025. Ffind displays the file it is looking through and when a match is found it
  2026. lists it on the screen.
  2027. free
  2028. Displays the number of Kilobytes free for DOS at anytime.
  2029.  
  2030. game
  2031. A small shoot-em up (try it - see what happens).
  2032.  
  2033. Playing keys: A     - UP
  2034.               Z     - DOWN
  2035.               ENTER - FIRE
  2036.               ESC   - EXIT
  2037.  
  2038. Must have a CGA card (or CGA emulator if HGA). EGA and VGA are good too but GAME only 
  2039. uses the CGA graphics mode: 640 * 200 black and white.
  2040.  
  2041. If the game is too fast then change it so that there are more background dots or put 
  2042. delays into the source file, then recompile it.
  2043. ie: Line 4, change const backdots=9 to another value, eg: 50.
  2044.  
  2045. hexd
  2046. TSR program that has 4 basic utilities, it may be more suitable than other TSRs because 
  2047. it uses very little memory (10k approx).
  2048.  
  2049.   1) Ascii table with all 256 characters shown at once. To find the number of a 
  2050.      character move the cursor using the numeric keypad (diagonal also).
  2051.      The character number is shown in hex and decimal at the bottom.
  2052.  
  2053.   2) Number conversion allows entry of a hex or decimal number which is then displayed 
  2054.      in DECIMAL, HEX and BINARY across the window. Press H to enter a hex number or D 
  2055.      to enter decimal. Press PgUp or PgDn to change the numbers.
  2056.  
  2057.   3) Keyboard codes - Press the key to see its KEY code, SCAN code and shift byte 
  2058.      values. KEY is the ascii value of the key. SCAN is the keyboard return code for 
  2059.      the key - includes arrows and function keys. KEYSCAN = SCAN * 256 + KEY
  2060.      Pushing ESC returns to the main menu - escape KEY = 27, SCAN = 1.
  2061.  
  2062.   4) Colours - shows the colour and its hex value.
  2063.      To read the colours HEX value - take the first hex digit from the righthand side
  2064.      down, the second digit from the row across the top.
  2065.  
  2066. Activate by using both left and right shift keys together.
  2067. To disable HEXD from working press D on the main menu.
  2068.  
  2069. To select an option from the menu either move bar with up/down or press the first 
  2070. letter of the option to activate immediately.
  2071.  
  2072. merr
  2073. Creates and maintains .err files (such as the dos.err file).
  2074. Start merr by entering the error messages full pathname: eg: \dos.err
  2075.  
  2076. Select a message using the arrow keys, modify by pressing enter.
  2077. A=Add, D=Delete, P=Print All, ESCAPE=save? and exit.
  2078. mis
  2079. A 1 or 2 player game. Each player (or computer) must try to destroy the enemy base by 
  2080. firing a missile at the opponent.
  2081. The game is played where both players move simultaneously.
  2082.  
  2083. Keys:       Function.        Player ONE   Player TWO
  2084.             ----------------------------------------------------
  2085.             Decrease angle       F1           7 (numeric keypad)
  2086.             Increase angle       F2           9 (numeric keypad)
  2087.             Decrease force       F3           1 (numeric keypad)
  2088.             Increase force       F4           3 (numeric keypad)
  2089.             Fire                tilde         2 (numeric keypad)
  2090.  
  2091.             Quit = ESC
  2092.  
  2093. Notes: A missile will blow up if it hits ANYTHING.
  2094.        The clouds give an indication as to the winds speed and direction.
  2095.        Each player scores 500 points for destroying the enemy base.
  2096.        A base will blow up if a) it has been hit sufficiently by missiles,
  2097.                               b) falling shrapnel has destroyed it.
  2098.  
  2099. Volcanoes can erupt from time to time; missiles will explode if they hit volcanic 
  2100. material; bases will explode if too much volcanic material lands on them; to stop a 
  2101. volcanoe blow it up.
  2102.  
  2103. music
  2104. A simple music program. Music was designed for entering the musical notes. The print 
  2105. feature in MUSIC converts the notes to tablature but is not 100% accurate as my 
  2106. knowledge of music is not great. I think I've got it working only when a song is in the 
  2107. key of D.
  2108.  
  2109. ALT-D Deletes the current Bar.
  2110. ALT-C Copies the current Bar.
  2111. ALT-R Toggles the 'repeat' status.
  2112. ALT-I Sets the current bar as containing the intro details, not repeated.
  2113.       Should only use this for the first bar, each sharpened note in the intro
  2114.       bar will represent the key of the music, ie: each sharpened note in the
  2115.       intro will be sharpened in the rest of the music.
  2116.       Don't put any note in the very first spot (each bar is 16 places).
  2117.  
  2118. S     Sharpen current note (brighter colour)
  2119. ESC   Save and Exit.
  2120. P     Play the music.
  2121. +/-   Increase/Decrease Tempo.
  2122.      Move note up/down tablature, ie: change note at cursor.
  2123. Del   Reset note, ie: no note.
  2124. a-g   Set note, change octave of current note.
  2125. ALT-G Prints guitar tablature to printer.
  2126.  
  2127. othello
  2128. The board game (also called Reversi). You can play either computer or human.
  2129.  
  2130. The computer uses a strange method for its moves, don't let it go to your head if you 
  2131. beat it a few times.
  2132. panprt
  2133. Special printing program, it reads in a file which can contain special control codes 
  2134. for nice printing. Read the PANPRT.F source file to view the control codes supported, 
  2135. add your own codes to the program.
  2136.  
  2137. pc
  2138. Displays all selected files on the screen sorted by filename.ext.
  2139.  
  2140. The user then selects a file by positioning the cursor over the filename and pressing 
  2141. ENTER (or P for printout).
  2142.  
  2143. A file called PC.FIL must be in the root directory of the current drive, if it doesn't 
  2144. exist then the default *.DOC is used. If PC.FIL does exist then it must contain 
  2145. filenames using wildcard characters (only files in the current directory can be 
  2146. displayed). PC.FIL can be created using any ASCII text editor.
  2147.  
  2148. Example PC.FIL: *.F
  2149.                 *.LST
  2150.                 *.DOC    (three seperate lines in the file.)
  2151.  
  2152. When a file is displayed any of HOME, END, UP, DOWN, PGDN & PGUP can be used to move 
  2153. around the file. If the line length is greater than 160 characters then the UP/PGUP 
  2154. will sometimes 'jump' the display.
  2155.  
  2156. PC will handle a maximum of 1024 files.
  2157. A wordstar option is provided, press W to toggle when in display mode.
  2158.  
  2159. pcsoft
  2160. Peter Campbell Software's One Fingered Typist utility program.
  2161. This program is supplied to registered users only.
  2162.  
  2163. Add "PCSOFT" to your autoexec.bat file to make PCSOFT active all the time.
  2164. With PCSOFT you push the shift key (shift, alt or control) and then push the other key. 
  2165. More than one shift key can be pushed, for example CTRL then ALT followed by DEL would 
  2166. do a system reset.
  2167.  
  2168. PCSOFT does not effect the current keyboard use in most cases, a multi-finger
  2169. typist would not notice it.
  2170.  
  2171. This program was designed for use by people with an interest or need for computers but 
  2172. are restricted to pushing one key with whatever possible means.
  2173. Secondary use: One hand using a mouse then second hand can still do everything.
  2174.  
  2175. phone
  2176. Terminal emulator and file transfer program to use calling BBS's or other data 
  2177. services. This program is supplied to registered users only.
  2178.  
  2179. Help is provided seperately with this program: phone.doc
  2180. The configuration file: phone.cfg.
  2181.  
  2182. pscr
  2183. Overrides the normal Shift-PrtSc function: 3 new features for Shift-PrtSc.
  2184.  
  2185. 1) Allows selection of any part of the screen when in 80 column colour text mode (the
  2186.    default for almost every application).
  2187.          Keys: Move top-left corner with shifted-arrows.
  2188.                Move bottom-right corner with arrows.
  2189.                Press ENTER to print highlighted area.
  2190.                ESC to abort screen dump.
  2191.  
  2192. 2) If using 320*200 colour screen then it will be printed with a little shading.
  2193.    Your printer must have the 640 dots per page graphics setting.
  2194.    All colours will be shaded using a 2*2 grid for the 4 colours.
  2195.  
  2196. 3) If using the 640*200 graphics screen then it will be printed.
  2197.    Your printer must have the 640 dots per page graphics setting.
  2198.  
  2199. Note: If the screen is in any other graphics/text mode the default PrtSc is used.
  2200.  
  2201. pu
  2202. Printer Utilities is a comprehensive TSR program to set the printer options from the 
  2203. keyboard. TSR=Terminate and Stay Resident.
  2204.  
  2205. PU has 21 built in and 21 user definable printer options.
  2206.  
  2207. PU has basic features from the main menu, Line Feed, Form Feed, Reset and printing test 
  2208. messages to help setting up the printer.
  2209.  
  2210. The menu works with one-touch operation - press the first letter of the option to 
  2211. activate it.
  2212.  
  2213. Note: When Keeping the options (save) a copy of PU.CFG will be saved in the CURRENT 
  2214.       disk/directory.
  2215.  
  2216. purge
  2217. PURGE is a file deleter and one-page file viewer.
  2218.  
  2219. Type 'PURGE *.BAK' and all backup files will be displayed for selection.
  2220.  
  2221. Pressing F1 would select all files. Pressing D and confirming would delete all SELECTED 
  2222. files.
  2223.  
  2224. Pressing V displays the current highlighted file on screen, only the first page is 
  2225. displayed - just to jog your memory of what the file is.
  2226.  
  2227. Typing 'PURGE' assumes *.* (all files in current directory).
  2228.  
  2229. rkey
  2230. Key redefinition program. You can define any key to mean a whole series of keystrokes.
  2231. Rkey works by learning as you type.
  2232.  
  2233. Rkey's main use has been while editing source files to quickly use the learn and 
  2234. playback option to do repetitive tasks.
  2235. sed
  2236. Sector Editor allows access to all sectors on a hard disk, ignoring the partition 
  2237. limits.
  2238.  
  2239. SED can view a maximum of 1-64 sectors, 0-15 heads & 0-1023 tracks.
  2240.  
  2241. All menu options have their letter inverted on the screen.
  2242. Options:                              Range:
  2243.     1   - Alter max tracks            0 - 1023
  2244.     2   - Alter max heads             0 - 15
  2245.     3   - Alter max sectors           0 - 63
  2246.     T   - Set current track           0 - max tracks-1
  2247.     H   - Set current head            0 - max heads-1
  2248.     S   - Set current sector          1 - max sectors
  2249.     ESC - Abort SED
  2250.     A   - Change to ASCII display
  2251.     X   - Change to HEX display
  2252.     F   - Find a string from current sector to end of disk
  2253.     O   - Open disk output file
  2254.     W   - Write displayed sector to disk file
  2255.     C   - Close disk output file
  2256.  
  2257. Other keys:
  2258.     Arrows - move cursor (current version has no use)
  2259.     PgUp   - Back one sector
  2260.     PgDn   - Advance one sector
  2261.  
  2262. When using the ascii display there are two sides, the left displays the actual bytes - 
  2263. using the IBM character set. The righthand side shows the bytes in filtered form (bit 7 
  2264. is ignored, if less than 32 then prints a dot '.'). To print the screen using the PrtSc 
  2265. button then load PSCR prior to printing so the right hand side of the screen (when in 
  2266. ASCII display mode) can be printed, printing the actual IBM characters will cause the 
  2267. printer to process them as control codes.
  2268.  
  2269. If the program gets a disk error then you will have the options
  2270. to either S - Try next sector or H - Try next head.
  2271.  
  2272. shoot
  2273. A one or two fast shoot-em up game.
  2274. The object is to kill your oponent by shooting their space ship.
  2275.  
  2276. Each player is limited to 50 shots, when both players run out of ammo each player is 
  2277. re-stocked with another 50 shots and so on.
  2278.  
  2279. Scoring: For shooting your oponent you get 200 points.
  2280.          For shooting a person or car then you get 2 or 5 points.
  2281.          For shooting trees, walls and rocks no points are scored.
  2282.  
  2283. The game ends when a player has killed his/her oponent 10 times.
  2284.  
  2285. Player 1 uses  F2, F4 & tilde                    (up, down and fire)
  2286. Player 2 uses  4,  1  & + on the numeric keypad  (up, down and fire)
  2287.  
  2288. SHOOT C = one player vs computer.
  2289. SHOOT   = two players.
  2290. sieve
  2291. Standard benchmark. This version in FAST compares favourably with all other versions 
  2292. I've seen, especially in size and speed (what else!).
  2293.  
  2294. tsr
  2295. Terminate and Stay Resident skeleton program for use in writing TSR programs.
  2296.  
  2297. The smallest TSR program is just over 700 bytes long, this is the smallest overhead set 
  2298. by any language I know of (except Assembly).
  2299.  
  2300. wt
  2301. Text editor designed mainly for programming.
  2302.  
  2303. WT summary of features:
  2304.  
  2305. a) WT can have a different configuration in each sub-directory so you have a
  2306.    different tab value, default file extension and backup settings.
  2307. b) Up to 16 files can be edited at once.
  2308. c) Search/Replace is instant/quick.
  2309. d) Full line and column blocks can be easily defined. The most recently defined block
  2310.    is saved as the \WT.INS file, push Shift-Insert to insert the current block.
  2311. e) Most people like 1 editor and stick with it, no one ever makes a compromise when it
  2312.    comes to their editor. WT can be modified by you for personal customisation.
  2313. f) WT can keep a log file with the file, date & time for each file which is edited.
  2314.